package org.study.jdbc.boot.config;

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.*;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;

/**
 * 说明与注意：
 * 1、前两个 Bean 是数据源的创建，通过 @ConfigurationProperties 可以知道这两个数据源分别加载了 spring.datasource.primary.* 和 spring.datasource.secondary.* 的配置。
 * 2、@Primary 注解指定了主数据源，就是当我们不特别指定哪个数据源的时候，就会使用这个 Bean
 * 3、后两个 Bean 是每个数据源对应的 JdbcTemplate。可以看到这两个 JdbcTemplate 创建的时候，分别注入了 primaryDataSource 数据源和 secondaryDataSource 数据源
 *
 * @author Administrator
 * @date 2021-11-29
 */
@Configuration
public class DataSourceConfiguration {
    @Primary
    @Bean(name = "primaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.primary")
    public DataSource primaryDataSource() {
        DataSource dataSource = DataSourceBuilder.create().build();
        return dataSource;
    }

    @Primary
    @Bean(name = "primaryJdbcTemplate")
    public JdbcTemplate primaryJdbcTemplate(@Qualifier("primaryDataSource") DataSource primaryDataSource) {
        JdbcTemplate jdbcTemplate = new JdbcTemplate(primaryDataSource);
        return jdbcTemplate;
    }

    @Bean(name = "secondaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.secondary")
    public DataSource secondaryDataSource() {
        DataSource dataSource = DataSourceBuilder.create().build();
        return dataSource;
    }

    @Bean(name = "secondaryJdbcTemplate")
    public JdbcTemplate secondaryJdbcTemplate(@Qualifier("secondaryDataSource") DataSource secondaryDataSource) {
        JdbcTemplate jdbcTemplate = new JdbcTemplate(secondaryDataSource);
        return jdbcTemplate;
    }
}
